package com.tencent.externalstoragebar.view;

import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.animation.ValueAnimator;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.RectF;
import android.util.AttributeSet;
import android.view.View;

import com.tencent.externalstoragebar.tools.l;
import com.tencent.externalstoragebar.publicthing.PublicData;
import com.tencent.externalstoragebar.service.FloatingWindowService;

//悬浮窗视图类
public class StorageBarView extends View {
    private Paint paint;
    private Paint progressPaint;
    private float progress = 0f;
    private boolean isAnimating = false;

    // 添加一个成员变量来保存ValueAnimator的实例
// 成员变量
    private ValueAnimator animator1;
    private ValueAnimator animator2;
// ... 其他成员变量和代码 ...

    // 停止动画的方法
    public void stopAnimation() {
        // 检查animator1是否正在运行
        if (animator1 != null && animator1.isRunning()) {
            animator1.cancel();
        }

        // 检查animator2是否正在运行
        if (animator2 != null && animator2.isRunning()) {
            animator2.cancel();
        }

        // 重置状态（如果需要）
        isAnimating = false;
        progress = 0f;

        // 请求重绘以更新视图
        invalidate();
    }
    public StorageBarView(Context context) {
        super(context);
        init();
    }

    public StorageBarView(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    public StorageBarView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init();
    }

    private void init() {
        // 初始化绘制完整圆形的画笔，设置为空心
        paint = new Paint(Paint.ANTI_ALIAS_FLAG);
        paint.setColor(PublicData.color);
        paint.setStyle(Paint.Style.STROKE); // 设置为空心
        paint.setStrokeWidth(PublicData.r-PublicData.rIn); // 设置边框宽度
        paint.setAlpha(PublicData.alpha);//设置透明度

        // 初始化绘制进度扇形的画笔，也设置为空心
        progressPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
        progressPaint.setColor(Color.TRANSPARENT); // 初始颜色设置为透明，稍后在绘制时使用PorterDuff模式清除部分区域
        progressPaint.setStyle(Paint.Style.STROKE);
        progressPaint.setStrokeWidth(70); // 进度边框宽度与完整圆形的边框宽度保持一致
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        int width = getWidth();
        int height = getHeight();
        int minSize = Math.min(width, height);
        float radius = minSize / 2f - paint.getStrokeWidth() / 2; // 减去边框宽度的一半

        if (isAnimating) {
            float sweepAngle = progress * 360f; // 根据progress计算扇形扫过的角度

            // 使用默认模式（SRC_OVER）绘制逐渐增加的扇形
            // 注意：paint对象应该是一个描边样式的Paint对象
            canvas.drawArc(new RectF(width / 2 - radius, height / 2 - radius, width / 2 + radius, height / 2 + radius),
                    -90, // 起始角度（从上开始）
                    sweepAngle, // 扫过的角度
                    false, // 不绘制扇形边框
                    paint); // 绘制扇形
        }
    }

    public void startAnimation() {
        if (!isAnimating) {
            isAnimating = true;

            // 第一个动画，从0到1
            animator1 = ValueAnimator.ofFloat(0f, 1f);
            animator1.setDuration(PublicData.time); // 第一个动画的持续时间

            animator1.addUpdateListener(animation -> {
                progress = (float) animation.getAnimatedValue();
                invalidate(); // 请求重绘
            });

            // 设置第二个动画的监听器，在第一个动画结束后开始
            animator1.addListener(new AnimatorListenerAdapter() {
                @Override
                public void onAnimationEnd(Animator animation) {
                    super.onAnimationEnd(animation);

                    //蓄力完成要展示显示二阶段进度条
                    l.d("蓄力完成,展示二阶段进度条");
                    FloatingWindowService.show();

                    // 开始第二个动画，保持扇形不变
                    animator2 = ValueAnimator.ofFloat(1f, 1f); // 值不变，所以扇形保持不变
                    animator2.setDuration(5000); // 第二个动画的持续时间，5秒

                    animator2.addUpdateListener(animation2 -> {
                        // 这里不需要更新progress，因为值已经是1
                        invalidate(); // 请求重绘，但扇形保持不变
                    });

                    animator2.addListener(new AnimatorListenerAdapter() {
                        @Override
                        public void onAnimationEnd(Animator animation) {
                            super.onAnimationEnd(animation);
                            // 第二个动画结束后，可以重置状态或进行其他操作
                            isAnimating = false;
                            // 第二个动画结束,那么二阶段蓄力条也要消失
                            FloatingWindowService.destroy();
                            // 如果你想重置进度，可以取消下面的注释
                            // progress = 0f;
                            // invalidate(); // 请求重绘，如果需要重置进度
                        }
                    });

                    animator2.start(); // 开始第二个动画
                }
            });

            animator1.start(); // 开始第一个动画
        }
    }


}
